home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / tempfile.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  9KB  |  394 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __all__ = [
  5.     'NamedTemporaryFile',
  6.     'TemporaryFile',
  7.     'mkstemp',
  8.     'mkdtemp',
  9.     'mktemp',
  10.     'TMP_MAX',
  11.     'gettempprefix',
  12.     'tempdir',
  13.     'gettempdir']
  14. import os as _os
  15. import errno as _errno
  16. from random import Random as _Random
  17. if _os.name == 'mac':
  18.     import Carbon.Folder as _Folder
  19.     import Carbon.Folders as _Folders
  20.  
  21.  
  22. try:
  23.     import fcntl as _fcntl
  24. except ImportError:
  25.     
  26.     def _set_cloexec(fd):
  27.         pass
  28.  
  29.  
  30.  
  31. def _set_cloexec(fd):
  32.     
  33.     try:
  34.         flags = _fcntl.fcntl(fd, _fcntl.F_GETFD, 0)
  35.     except IOError:
  36.         pass
  37.  
  38.     flags |= _fcntl.FD_CLOEXEC
  39.     _fcntl.fcntl(fd, _fcntl.F_SETFD, flags)
  40.  
  41.  
  42. try:
  43.     import thread as _thread
  44. except ImportError:
  45.     import dummy_thread as _thread
  46.  
  47. _allocate_lock = _thread.allocate_lock
  48. _text_openflags = _os.O_RDWR | _os.O_CREAT | _os.O_EXCL
  49. if hasattr(_os, 'O_NOINHERIT'):
  50.     _text_openflags |= _os.O_NOINHERIT
  51.  
  52. if hasattr(_os, 'O_NOFOLLOW'):
  53.     _text_openflags |= _os.O_NOFOLLOW
  54.  
  55. _bin_openflags = _text_openflags
  56. if hasattr(_os, 'O_BINARY'):
  57.     _bin_openflags |= _os.O_BINARY
  58.  
  59. if hasattr(_os, 'TMP_MAX'):
  60.     TMP_MAX = _os.TMP_MAX
  61. else:
  62.     TMP_MAX = 10000
  63. template = 'tmp'
  64. tempdir = None
  65. _once_lock = _allocate_lock()
  66. if hasattr(_os, 'lstat'):
  67.     _stat = _os.lstat
  68. elif hasattr(_os, 'stat'):
  69.     _stat = _os.stat
  70. else:
  71.     
  72.     def _stat(fn):
  73.         
  74.         try:
  75.             f = open(fn)
  76.         except IOError:
  77.             raise _os.error
  78.  
  79.         f.close()
  80.  
  81.  
  82. def _exists(fn):
  83.     
  84.     try:
  85.         _stat(fn)
  86.     except _os.error:
  87.         return False
  88.  
  89.     return True
  90.  
  91.  
  92. class _RandomNameSequence:
  93.     characters = 'abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + '0123456789-_'
  94.     
  95.     def __init__(self):
  96.         self.mutex = _allocate_lock()
  97.         self.rng = _Random()
  98.         self.normcase = _os.path.normcase
  99.  
  100.     
  101.     def __iter__(self):
  102.         return self
  103.  
  104.     
  105.     def next(self):
  106.         m = self.mutex
  107.         c = self.characters
  108.         choose = self.rng.choice
  109.         m.acquire()
  110.         
  111.         try:
  112.             letters = [ choose(c) for dummy in '123456' ]
  113.         finally:
  114.             m.release()
  115.  
  116.         return self.normcase(''.join(letters))
  117.  
  118.  
  119.  
  120. def _candidate_tempdir_list():
  121.     dirlist = []
  122.     for envname in ('TMPDIR', 'TEMP', 'TMP'):
  123.         dirname = _os.getenv(envname)
  124.         if dirname:
  125.             dirlist.append(dirname)
  126.             continue
  127.     
  128.     if _os.name == 'mac':
  129.         
  130.         try:
  131.             fsr = _Folder.FSFindFolder(_Folders.kOnSystemDisk, _Folders.kTemporaryFolderType, 1)
  132.             dirname = fsr.as_pathname()
  133.             dirlist.append(dirname)
  134.         except _Folder.error:
  135.             pass
  136.         except:
  137.             None<EXCEPTION MATCH>_Folder.error
  138.         
  139.  
  140.     None<EXCEPTION MATCH>_Folder.error
  141.     if _os.name == 'riscos':
  142.         dirname = _os.getenv('Wimp$ScrapDir')
  143.         if dirname:
  144.             dirlist.append(dirname)
  145.         
  146.     elif _os.name == 'nt':
  147.         dirlist.extend([
  148.             'c:\\temp',
  149.             'c:\\tmp',
  150.             '\\temp',
  151.             '\\tmp'])
  152.     else:
  153.         dirlist.extend([
  154.             '/tmp',
  155.             '/var/tmp',
  156.             '/usr/tmp'])
  157.     
  158.     try:
  159.         dirlist.append(_os.getcwd())
  160.     except (AttributeError, _os.error):
  161.         dirlist.append(_os.curdir)
  162.  
  163.     return dirlist
  164.  
  165.  
  166. def _get_default_tempdir():
  167.     namer = _RandomNameSequence()
  168.     dirlist = _candidate_tempdir_list()
  169.     flags = _text_openflags
  170.     for dir in dirlist:
  171.         if dir != _os.curdir:
  172.             dir = _os.path.normcase(_os.path.abspath(dir))
  173.         
  174.         for seq in xrange(100):
  175.             name = namer.next()
  176.             filename = _os.path.join(dir, name)
  177.             
  178.             try:
  179.                 fd = _os.open(filename, flags, 384)
  180.                 fp = _os.fdopen(fd, 'w')
  181.                 fp.write('blat')
  182.                 fp.close()
  183.                 _os.unlink(filename)
  184.                 del fp
  185.                 del fd
  186.                 return dir
  187.             continue
  188.             except (OSError, IOError):
  189.                 e = None
  190.                 if e[0] != _errno.EEXIST:
  191.                     break
  192.                 
  193.                 e[0] != _errno.EEXIST
  194.             
  195.  
  196.         
  197.     
  198.     raise IOError, (_errno.ENOENT, 'No usable temporary directory found in %s' % dirlist)
  199.  
  200. _name_sequence = None
  201.  
  202. def _get_candidate_names():
  203.     global _name_sequence
  204.     if _name_sequence is None:
  205.         _once_lock.acquire()
  206.         
  207.         try:
  208.             if _name_sequence is None:
  209.                 _name_sequence = _RandomNameSequence()
  210.         finally:
  211.             _once_lock.release()
  212.  
  213.     
  214.     return _name_sequence
  215.  
  216.  
  217. def _mkstemp_inner(dir, pre, suf, flags):
  218.     names = _get_candidate_names()
  219.     for seq in xrange(TMP_MAX):
  220.         name = names.next()
  221.         file = _os.path.join(dir, pre + name + suf)
  222.         
  223.         try:
  224.             fd = _os.open(file, flags, 384)
  225.             _set_cloexec(fd)
  226.             return (fd, _os.path.abspath(file))
  227.         continue
  228.         except OSError:
  229.             e = None
  230.             if e.errno == _errno.EEXIST:
  231.                 continue
  232.             
  233.             raise 
  234.             continue
  235.         
  236.  
  237.     
  238.     raise IOError, (_errno.EEXIST, 'No usable temporary file name found')
  239.  
  240.  
  241. def gettempprefix():
  242.     return template
  243.  
  244. tempdir = None
  245.  
  246. def gettempdir():
  247.     global tempdir
  248.     if tempdir is None:
  249.         _once_lock.acquire()
  250.         
  251.         try:
  252.             if tempdir is None:
  253.                 tempdir = _get_default_tempdir()
  254.         finally:
  255.             _once_lock.release()
  256.  
  257.     
  258.     return tempdir
  259.  
  260.  
  261. def mkstemp(suffix = '', prefix = template, dir = None, text = False):
  262.     if dir is None:
  263.         dir = gettempdir()
  264.     
  265.     if text:
  266.         flags = _text_openflags
  267.     else:
  268.         flags = _bin_openflags
  269.     return _mkstemp_inner(dir, prefix, suffix, flags)
  270.  
  271.  
  272. def mkdtemp(suffix = '', prefix = template, dir = None):
  273.     if dir is None:
  274.         dir = gettempdir()
  275.     
  276.     names = _get_candidate_names()
  277.     for seq in xrange(TMP_MAX):
  278.         name = names.next()
  279.         file = _os.path.join(dir, prefix + name + suffix)
  280.         
  281.         try:
  282.             _os.mkdir(file, 448)
  283.             return file
  284.         continue
  285.         except OSError:
  286.             e = None
  287.             if e.errno == _errno.EEXIST:
  288.                 continue
  289.             
  290.             raise 
  291.             continue
  292.         
  293.  
  294.     
  295.     raise IOError, (_errno.EEXIST, 'No usable temporary directory name found')
  296.  
  297.  
  298. def mktemp(suffix = '', prefix = template, dir = None):
  299.     if dir is None:
  300.         dir = gettempdir()
  301.     
  302.     names = _get_candidate_names()
  303.     for seq in xrange(TMP_MAX):
  304.         name = names.next()
  305.         file = _os.path.join(dir, prefix + name + suffix)
  306.         if not _exists(file):
  307.             return file
  308.             continue
  309.     
  310.     raise IOError, (_errno.EEXIST, 'No usable temporary filename found')
  311.  
  312.  
  313. class _TemporaryFileWrapper:
  314.     
  315.     def __init__(self, file, name):
  316.         self.file = file
  317.         self.name = name
  318.         self.close_called = False
  319.  
  320.     
  321.     def __getattr__(self, name):
  322.         file = self.__dict__['file']
  323.         a = getattr(file, name)
  324.         if type(a) != type(0):
  325.             setattr(self, name, a)
  326.         
  327.         return a
  328.  
  329.     
  330.     def __enter__(self):
  331.         self.file.__enter__()
  332.         return self
  333.  
  334.     if _os.name != 'nt':
  335.         unlink = _os.unlink
  336.         
  337.         def close(self):
  338.             if not self.close_called:
  339.                 self.close_called = True
  340.                 self.file.close()
  341.                 self.unlink(self.name)
  342.             
  343.  
  344.         
  345.         def __del__(self):
  346.             self.close()
  347.  
  348.         
  349.         def __exit__(self, exc, value, tb):
  350.             result = self.file.__exit__(exc, value, tb)
  351.             self.close()
  352.             return result
  353.  
  354.     
  355.  
  356.  
  357. def NamedTemporaryFile(mode = 'w+b', bufsize = -1, suffix = '', prefix = template, dir = None):
  358.     if dir is None:
  359.         dir = gettempdir()
  360.     
  361.     if 'b' in mode:
  362.         flags = _bin_openflags
  363.     else:
  364.         flags = _text_openflags
  365.     if _os.name == 'nt':
  366.         flags |= _os.O_TEMPORARY
  367.     
  368.     (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags)
  369.     file = _os.fdopen(fd, mode, bufsize)
  370.     return _TemporaryFileWrapper(file, name)
  371.  
  372. if _os.name != 'posix' or _os.sys.platform == 'cygwin':
  373.     TemporaryFile = NamedTemporaryFile
  374. else:
  375.     
  376.     def TemporaryFile(mode = 'w+b', bufsize = -1, suffix = '', prefix = template, dir = None):
  377.         if dir is None:
  378.             dir = gettempdir()
  379.         
  380.         if 'b' in mode:
  381.             flags = _bin_openflags
  382.         else:
  383.             flags = _text_openflags
  384.         (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags)
  385.         
  386.         try:
  387.             _os.unlink(name)
  388.             return _os.fdopen(fd, mode, bufsize)
  389.         except:
  390.             _os.close(fd)
  391.             raise 
  392.  
  393.  
  394.